#include <iostream>
#include <vector>
using namespace std;

// https://leetcode.cn/problems/sum-root-to-leaf-numbers/description/
// 129. 求根节点到叶节点数字之和
// 给你一个二叉树的根节点 root ，树中每个节点都存放有一个 0 到 9 之间的数字。
// 每条从根节点到叶节点的路径都代表一个数字：
// 例如，从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
// 计算从根节点到叶节点生成的 所有数字之和 。
// 叶节点 是指没有子节点的节点。
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(): val(0),left(NULL),right(NULL) {}
    TreeNode(int x): val(x),left(NULL),right(NULL) {}
};
class Solution {
public:
    int sumNumbers(TreeNode* root) {
        if(!root) return 0;

        int res = 0;
        dfs(root, 0, res);
        return res;
    }
private:
    void dfs(TreeNode* node, int tnum, int& sum) {
        tnum = tnum * 10 + node->val;   // 计算当前的数字

        if(!node->left && !node->right) // 叶子结点
            sum += tnum;
        else {
            if(node->left)
                dfs(node->left, tnum, sum);
            if(node->right)
                dfs(node->right, tnum, sum);
        }
    }
};

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
